
#include "odn_scene_Scene.h"
#include "odn_file_Reader.h"

//Constant map file identifier string of length 8 
#define MAP_FILE_ID_STRING "OudenMap"

namespace ouden
{
	
	class ODN_Level
	{
		
	public:
		
		//Called when a level object dies 
		//Can be overloaded to handle different types of objects differently 
		//TODO: Decide on Object type 
		virtual void onObjectDeath(ODN_Object* Object) = 0;
		
	protected:
		
		std::vector<ODN_SpawnPoint> spawnpoints;
		std::vector<ODN_Character*> characters; 
		
		
	private:
		
		
		
	};
	
	class ODN_TeamLevel : public ODN_Level
	{
		
	public:
		
		virtual void onObjectDeath(ODN_Object* Object);
		virtual void onObjectDeath(ODN_Player* Player);
		virtual void onObjectDeath(ODN_NPC* NPC);
		
	protected:
		
		//Team structure 
		struct sTeam
		{
			std::string Name;
			RGBAColor Color;
			std::vector<ODN_Player*> Players;
		};
		
		//Array of teams 
		std::vector<sTeam> teams; 
		
	private:
		
			
		
	};
	
	class ODN_TeamLevel : public ODN_Level
	{
		
	public:
		
		virtual void onObjectDeath(ODN_Object* Object);
		virtual void onObjectDeath(ODN_Player* Player);
		virtual void onObjectDeath(ODN_NPC* NPC);
		
	protected:
		
		//Typedef of an array of players 
		typedef std::vector<ODN_Player*> Players;
		
		//Array of teams 
		std::vector<Players> teams; 
		
	private:
		
			
		
	};
	
	/*
	class ODN_Level : public scene::ODN_Scene 
	{
		
	public:
		
		//Read the map file header 
		virtual void readDataHeader();
		
		//Read a section of the map file 
		virtual void processDataSection(sSectionHeader SectionHeader);
		
	private:
		
		//Version info structure 
		struct sVersionInfo {
			struct sVersionInfoSpecifics {
				BYTE MajorVersion;
				BYTE MinorVersion;
				BYTE MajorRevision;
				BYTE MinorRevision;
			} Format, Map;
		} versioninfo;
		
		//Checksum of the map for server to check 
		//NOTE
		// Server asks client for the checksum of the map
	    // The client doesn't use this value, it will calculate it itself, it is just in here to cache it for the server
	    // also used to determine if the map has become corrupted server side
		DWORD checksum;
		
	};
	*/
} ///namespace ouden 
